package com.yyfax.pay.common.util;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

import com.yyfax.framework.service.SequenceService;
import com.yyfax.pay.common.enums.PayTypeEnum;
import com.yyfax.pay.common.enums.PaymentEnum;
import com.yyfax.pay.third.facade.allinpay.AllInPayFacade;
import com.yyfax.pay.third.model.to.allinpay.AllInPayConfigExt;

@Component
public class PayoutIdUtil {

	/** 步长 */
	private static final int SEQUENCE_STEP = 20;

	/** 长度 */
	private static final int SEQUENCE_LENGH = 20;

	@Resource
	private SequenceService sequenceService;

	@Resource
	private AllInPayFacade allInPayFacade;

	/**
	 * 根据支付通道生成相应业务的流水号<br>
	 * 生成业务流水号最大不能超过32位
	 * 
	 * <pre>
	 * 富友代付业务流水号必须是数字，长度10~30（纯数字的业务流水，也是蛋疼的很）
	 * 通联代付业务流水必须全局唯一（该全局唯一指的是在通联公司的全局唯一），官方建议业务流水组装规则为：支付商户号+时间+流水号，长度1~40（真是个奇葩的业务）
	 * </pre>
	 * 
	 * @author buyi
	 * @date 2018-05-12 00:17:05
	 * @since v2.1.5
	 * @param paymentCode
	 * @param merchantCode
	 * @param orderId
	 * @return
	 */
	public String generatePayoutBusiId(String paymentCode, String merchantCode) {
		// 生成业务流水号，20位
		String busiId = sequenceService.sequenceStr(PayTypeEnum.PAY_OUT.getName(), "", SEQUENCE_STEP, SEQUENCE_LENGH);

		if (PaymentEnum.ALL_IN_PAY.isValue(paymentCode)) {
			AllInPayConfigExt configExt = allInPayFacade.getConfigExt(merchantCode, PayTypeEnum.PAY_OUT);

			// 业务流水规则： merchantCode(4位) + 支付公司商户号(15位)+ 业务流水号(20位)
			busiId = merchantCode.concat(configExt.getMerchantId()).concat(busiId);
		} else {
			// 默认业务流水,流水号规则： merchantCode(4位)+业务流水号(20位)
			// 默认业务流水为全数字，满足富友代付全数字的业务流水号
			busiId = merchantCode.concat(busiId);
		}

		return busiId;
	}

}
